perm filename PARTX.OLD[MSS,LCS] blob
sn#179204 filedate 1975-09-28 generic text, type T, neo UTF8
00100 C THIS AIDS IN EXTRACTING PARTS FROM SCORES. LOAD WITH MSFAIL.FAI
00200 COMMON/STF/RSTFAC(-3/4),RSTJ2 /XXX/LK,LP,JY
00300 COMMON RS,JA,REST,J2,RQ(18),JX,PR,LX,RDIS
00400 COMMON/XRN/RN(2000) /SF/KL,RT,KP,STFSZ,NAMX
00500 COMMON/POSI/STFF(-3/4),JJ2,PQ/PTR/PWDS(250),L,LL,I,IX
00600 DIMENSION IV(78),LIST(200),XLAST(4)
00700 1,XWDS(150)
00800 C**** RN MIGHT HAVE TO BE 4000 ******
00900 COMMON /PX/SX,PN(1800),Q(9000)
01000 DATA FIB/.7/,RSPC/24./
01100 EQUIVALENCE (RQ(2),R4),(R5,RQ(3)),(R6,RQ(4)),(R7,RQ(5))
01200 1,(R8,RQ(6)),(R9,RQ(7)),(RQ(10),XLFT),(LIST,IV)
01300 C RQ(2) IS R4, RQ(3) IS R5 ETC.
01400
01450 YN=0
01500 XSIG=FIB
01600 CLEF=FIB
01700 XMTR=FIB
01800 XLFT=0
01900 ENDLN=0
02000 KQ=0
02100 YCLEF=2.
02200 YSIG=2.
02300 YMTR=2.
02400 14 LSTNM=0
02500 13 XWDS(1)=1
02600 IF(LSTNM.EQ.0)RM=0
02700 L=1
02800 LK=1
02900 IF(LSTNM.NE.0)GO TO 87
03000 RS=3
03100 C SAVE UPPER STAFF NUM FOR NEXT FILE.
03200 TYPE 144
03300 144 FORMAT(' STAFF SIZE = '$)
03400 ACCEPT 5,STFSZ
03500 IF(STFSZ.EQ.0)STFSZ=.9
03600 C NON-ZERO STFSZ WILL CHANGE P5 IN ALL USED STAVES.
03700 10 IF(LSTNM.EQ.0)GO TO 83
03800 87 IF(NAME.EQ.LSTNM)GO TO 83
03900 NAME=NAME+2
04000 GO TO 84
04100 86 FORMAT(1XA5)
04200 3 FORMAT(' TYPE INPUT NAME ',$)
04300 300 FORMAT(' TYPE FINAL NAME ',$)
04400 83 TYPE 3
04500 ACCEPT 2,NAME
04600 IF(NAME.EQ.' ')GO TO 83
04700 IF(NAME.EQ.'X')GO TO 20
04800 C************* TYPE 'X' TO FINISH *****************
04900 TYPE 300
05000 ACCEPT 2,LSTNM
05100 CC IF(LSTNM.EQ.' ')LSTNM=NAME
05200 IF(LSTNM.EQ.' ')GO TO 83
05300 NAMZ=NAME
05400 84 IF(LOOKD(NAME))GO TO 284
05500 NAME=NAMZ+256
05600 IF(LOOKD(NAME).GE.0)GO TO 83
05700 NAMZ=NAME
05800 C FOUND NO MORE TO READ
05900 284 TYPE 86,NAME
06000 JZ=0
06100 IF(RM.NE.0)GO TO 77
06200 RM=-1
06300 4 FORMAT(' TYPE INST NAME '$)
06400 TYPE 4
06500 ACCEPT 2,RNAM
06600 C TYPE ANY NUM AFTER INS. NAME TO STOP RHYTH RESPACING.
06700 IF(RNAM.GT.0)REREAD 5,SN
06800 IF(INM.EQ.'99')GO TO 20
06900 CC K=SN/100.
07000 TYPE 46
07100 46 FORMAT(' TRANS. NUM. -- '$)
07200 ACCEPT 5,TR
07300 C TRANSPOSITION BY STEPS
07400 IF(TR.GE.99)GO TO 83
07500 77 REWIND 21
07600 177 CALL IFILE(21,NAME)
07700 C LP IS START OF RN ARRAY THIS TIME
07800 READ(21),ITEM,I,
07900 1 (PWDS(K),K=1,ITEM+1),(RN(K),K=1,I-1),ISCR,(IV(K),K=1,ISCR),
08000 1 LCNT,(LIST(K),K=1,LCNT),RSTFAC,STFF
08200 DO 45 K=1,ITEM
08300 J=PWDS(K)
08400 IF(RN(J+1).NE.8)GO TO 45
08500 XLFT=RN(J+3)
08600 IF(RNAM)GO TO 145
08700 C GO TO 145 IF IT'S A NAME, NOT A NUMB.
08800 IF(RN(J+2).EQ.SN)GO TO 8
08900 GO TO 45
09000 145 R9=RN(J+9)
09100 TYPE 86,R9
09200 IF(R9.NE.RNAM)GO TO 45
09300 SN=RN(J+2)
09400 C LEFT LIMIT OF STAFF
09500 C FOR FIRST BAR LINES.
09600 CC IF(STFSZ.EQ.0)STFSZ=RSTFAC(IFIX(SN))
09700 C FOUND THE STAFF
09800 GO TO 8
09900 45 CONTINUE
10000 SN=200
10100 TYPE 16
10200 IF(YN.EQ.'G')GO TO 10
10300 C TYPE 'G' FOR "GO" -- WON'T WAIT FOR RESPONSE ANYMORE.
10400 ACCEPT 2,YN
10500 IF(YN.NE.'Y')GO TO 10
10600 16 FORMAT(' INST. NOT FOUND --- ADD BARS REST? Y-N? ',$)
10700 IF(YCLEF.GT.1)YCLEF=-1
10800 IF(YSIG.GT.1)YSIG=-1
10900 IF(YMTR.GT.1)YMTR=-1
11000 GO TO 450
11100 8 SIG=200
11200 C FOR TRANSP. SECTION.
11300 RN(J+8)=0
11400 C REMOVES VERTICAL SPACER, IF ANY
11500 IF(RS.EQ.0)RN(J+8)=2.95
11600 C PUTS ONE IN IF THIS IS LAST ONE FOR THIS FILE.
11700
11800 450 ZLFT=XLFT+.5
11900 CC RPOS=XLFT
12000 DO 6 K=1,ITEM
12100 J=PWDS(K)
12200 R=RN(J+1)
12300 IF(R.NE.10)GO TO 800
12400 IF(RN(J).LT.4)GO TO 80
12500 IF(RN(J+6).GT.1.3)GO TO 6
12600 C SKIPS PAGE NUMS. (I.E. BIG SIZE)
12700 IF(RN(J).LT.6)GO TO 80
12800 C FOUND A NUM. IN BOX ↓↓
12900 CC2182 RN(J+2)=SN
13000 CC IF(YN.EQ.'Y')RPOS=RN(J+3)-3.
13100 GO TO 810
13200 800 IF(R.NE.4)GO TO 80
13300 CCC IF(NBAR)GO TO 80
13400 IF(RN(J).NE.2)GO TO 182
13500 C FOUND A BAR LINE
13600 IF(RN(J+3).LT.ZLFT)GO TO 6
13700 C DROPS BAR LINE AT LEFT OF STAFF.
13800 KZ=RN(J+4)/100.
13900 RN(J+4)=1.+KZ*100.
14000 C KZ IS FOR THICK BARS.
14100 RR=RN(J+3)
14200 DO 82 KY=K+1,ITEM
14300 KZ=PWDS(KY)
14400 IF(RN(KZ+1).NE.4)GO TO 82
14500 IF(RN(KZ).NE.2)GO TO 82
14600 C AVOIDS DUPLICATE BARS.
14700 IF(ABS(RR-RN(KZ+3)).GT..5)GO TO 82
14800 RN(KZ+2)=99
14900 RN(KZ+1)=0
15000 82 CONTINUE
15100 IF(YN.NE.'Y')GO TO 810
15200 CALL ADDRST(RR,XWDS,PN)
15300 GO TO 6
15400 182 RN(J+1)=44
15500 C CHANGES CODE NUM
15600 IF(RN(J).LT.5)GO TO 80
15700 IF(RN(J+7).GE.3)GO TO 6
15800 C SKIP HEAVY BRACKETS.
15900 80 RSN=RN(J+2)
16000 C THE STAFF NUM.
16100 CC80 IF(RN(J+2).NE.SN)GO TO 6
16200 IF(R.NE.3)GO TO 3801
16300 IF(YCLEF)GO TO 4801
16400 IF(RSN.NE.SN)GO TO 6
16500 4801 RR=RN(J+5)
16600 IF(RN(J).LT.3)RR=0
16700 IF(RR.EQ.CLEF)GO TO 6
16800 C SKIP DUPLICATE CLEFS.
16900 IF(RR.GT.3)GO TO 4800
17000 CLEF=RR
17100 C** IF(YCLEF.EQ.1)GO TO 4802
17200 C** IF(YCLEF)YCLEF=1.
17300 YCLEF=0
17400 GO TO 1800
17500 4800 IF(RSN.NE.SN)GO TO 6
17600 RN(J+1)=33
17700 GO TO 1800
17800 4802 YCLEF=0
17900 C CATCHES CLEF AFTER FIRST RESTS.
18000 GO TO 6
18100 3801 IF(R.NE.17)GO TO 3800
18200 IF(YSIG)GO TO 3802
18300 IF(RSN.NE.SN)GO TO 6
18400 3802 IF(RN(J+5).EQ.XSIG)GO TO 6
18500 YSIG=0
18600 XSIG=RN(J+5)
18700 C SKIPS DUPL. KEY SIGS.
18800 GO TO 1800
18900 3800 IF(R.EQ.8)GO TO 6
19000 C OMIT ALL STAVES FOR NOW
19100 IF(R.NE.18.)GO TO 81
19200 IF(YMTR)GO TO 1801
19300 IF(RSN.NE.SN)GO TO 6
19400 1801 RA=RN(J+5)*100.+RN(J+6)
19500 C THE TIME SIG.
19600 IF(XMTR.EQ.RA)GO TO 6
19700 XMTR=RA
19800 YMTR=0
19900 GO TO 1800
20000 81 IF(RSN.NE.SN)GO TO 6
20100 1800 IF(RN(J+3).LT.XLFT)GO TO 6
20200 C OMIT SOME THINGS TO LEFT OF STAFF BEGINNING.
20300 810 JA=PWDS(K+1)
20400 RN(J+2)=RS
20500 DO 7 KY=J,JA-1
20600 PN(LK)=RN(KY)
20700 7 LK=LK+1
20800 L=L+1
20900 XWDS(L)=LK
21000 6 CONTINUE
21100
21200 C******↓↓↓↓↓↓ RHYTH RESET ↓↓↓↓↓↓↓↓
21300 I=1
21400 DO 243 K=1,L-1
21500 LB=XWDS(K)+1
21600 IF(PN(LB).NE.16)GO TO 243
21700 IF(PN(LB-1).LT.8)GO TO 243
21800 JL=XWDS(K-1)
21900 244 PN(LB+2)=PN(JL+3)
22000 C PUTS CONTINUATION OF TEXT IMMEDIATELY AFTER PREV. POS.
22100 C FOR SPACING PROBLEMS BELOW.
22200 243 CONTINUE
22300 M=2
22400 J=1
22500 24 RA=100000.
22600 C POSITION
22700 DO 21 K=1,L-1
22800 JL=XWDS(K)+3
22900 R=PN(JL)
23000 IF(R.EQ.100000)GO TO 21
23100 241 IF(ABS(R-RA).GT..1)GO TO 240
23200 R=RA
23300 PN(JL)=R
23400 C PUT IN HERE MULTI-VOICE TRAP
23500 GO TO 21
23600 240 IF(R.GT.RA)GO TO 21
23700 C LINES THEM UP
23800 I=K
23900 RA=R
24000 21 CONTINUE
24100 IF(RA.EQ.100000)GO TO 23
24200 C JUMP IF ALL SORTED
24300 242 JL=XWDS(I)
24400 LA=JL
24500 N=PN(JL)+3
24600 C NEXT POINTER
24700 PWDS(M)=PWDS(M-1)+N
24800 M=M+1
24900 DO 22 K=J,J+N-1
25000 RN(K)=PN(JL)
25100 22 JL=JL+1
25200 PN(LA+3)=100000
25300 C PUT IT ASIDE
25400 J=N+J
25500 GO TO 24
25600
25700 23 IF(ENDLN.EQ.0)GO TO 2334
25800 R4=0
25900 R5=1000
26000 R7=RS
26100 R8=ENDLN
26200 R9=0
26300 GO TO 33
26400 2334 R4=0
26500 R5=10000
26600 CC R8=-XLFT
26700 R8=1.-RN(4)
26800 R9=0
26900 C INSERT?? →→ IF(R8.GT.0)R9=200.
27000 R7=RS
27100 33 CALL PTMOVE(RN,PWDS)
27200 DO 32 K=1,IFIX(PWDS(L))-1
27300 KQ=KQ+1
27400 32 Q(KQ)=RN(K)
27500 ENDLN=ENDLN+200
27600 L=1
27700 LK=1
27800 TYPE 3001,KQ
27900 GO TO 10
28000
28100 27 FORMAT(' RESPACING')
28200 20 K=1
28300 TYPE 27
28400 KK=1
28500 220 JJ=Q(K)+3
28600 PN(KK)=K
28700 C NEW POINTER
28800 K=K+JJ
28900 KK=KK+1
29000 IF(K.LT.KQ)GO TO 220
29100 PN(KK)=K
29200 TYPE 3001,KK
29300 L=KK
29400 C DELETES EXTRA BAR LINES, ETC.
29500 CALL RESTS(PN,Q)
29600 C FROM NOW ON ALL CODES #-1 ARE IGNORED, RESTS HAVE BEEN COMBINED.
29700 K=1
29800 L=1
29900 LL=0
30000 LK=1
30100 221 IF(Q(IFIX(PN(K))+1))GO TO 321
30200 DO 421 KL=IFIX(PN(K)),IFIX(PN(K+1))-1
30300 LL=LL+1
30400 421 Q(LL)=Q(KL)
30500 LK=LK+1
30600 PN(LK)=LL+1
30700 321 K=K+1
30800 IF(K.LT.KK)GO TO 221
30900 L=LK-1
31000 C L=NUMBER OF ITEMS FOR RHY RECONS.
31100 123 LB=1
31200 LL=0
31300 R5X=0
31400 C NEXT RECONSTITUTES RHYTHM
31500 LP=1
31600 25 N=PN(LB)
31700 R=Q(N+1)
31800 IF(TR.EQ.0)GO TO 51
31900 IF(R.EQ.1)GO TO 52
32000 IF(R.EQ.5)GO TO 52
32100 IF(R.EQ.6)GO TO 52
32200 IF(R.EQ.17)GO TO 117
32300 51 PR=0
32400 IF(R.LE.4)GO TO 430
32500 IF(R.LT.17)GO TO 30
32600 C LOOKS FOR 17 AND 18, KSIG AND METER.
32700 IF(R.GT.18)GO TO 30
32800 430 IF(R.NE.1)GO TO 230
32900 IF(Q(N).LT.7)GO TO 630
33000 IF(Q(N+9))GO TO 30
33100 C SKIPS NON-LEDGER LINE NOTES.
33200 GO TO 130
33300 630 PR=1.
33400 IF(Q(N+8).EQ.1000.)PR=.05
33500 C ↑↑↑↑ FOR GRACE NOTES
33600 GO TO 130
33700 C LOOK ONLY AT NOTES AND RESTS AND NON-DOUBLE STOPS, AND BARS,CLEFS
33800 230 IF(R.NE.2)GO TO 130
33900 IF(Q(N).LT.5)PR=1.
34000 C JUMP IF NO RHYTH VALUE FOUND IN P7 (P9 FOR NOTES)
34100 CC130 IF(RCLEF(Q(N)))GO TO 30
34200 CJ SKIPS NON-CLEFS
34300 130 S=Q(N+3)
34400 LA=LB
34500 26 LA=LA+1
34600 IF(LA.GT.L)GO TO 30
34700 C FIND NEXT IMPORTANT ITEM
34800 NA=PN(LA)
34900 RR=Q(NA+1)
35000 IF(RR.LE.4)GO TO 134
35100 IF(RR.LT.17)GO TO 26
35200 IF(RR.GT.18)GO TO 26
35300 CC134 IF(RR.NE.4)GO TO 34
35400 CC IF(Q(NA).NE.2)GO TO 26
35500 C USES ONLY NOTES, RESTS, BARS, CLEFS
35600 CC34 IF(RCLEF(Q(NA)))GO TO 26
35700 CJ SKIPS NON-CLEFS
35800 134 RX=Q(NA+3)
35900 C POSITION OF NEXT ITEM
36000 IF(S.EQ.RX)GO TO 26
36100 IF(R.LT.3)GO TO 235
36200 IF(R.GE.17)P=4.
36300 C PUT IN FOR LARGE KSIGS LATER.
36400 IF(R.EQ.4)P=2.
36500 IF(R.EQ.3)P=6.
36600 IF(Q(NA+5).GE.100.)P=5.
36700 C SPACE FOR BARS, KSIG, METERS, CLEFS (LAST FOR MINI-CLEF)
36800 IF(RR.EQ.17)P=P+3.
36900 C IF NEXT(RR) IS KSIG, ADD SPACE.
37000 GO TO 335
37100 235 K=9
37200 IF(R.EQ.2)K=7
37300 P=Q(N+K)
37400 IF(PR.NE.0)P=PR
37500 C ASSUMES QUARTER VALUE IF NONE WAS GIVEN
37600 P=P+(.125-P)*FIB
37700 135 P=P*RSPC
37800 C FINDS RHYTH IN P9 OR P7(REST)
37900 C IF DIFFERENT SIMULTANEOUS RHYTHMS, ZERO OUT LARGER BEFORE HAND.
38000 IF(P)GO TO 30
38100 C SKIPS NOTES WITH SUPPRESSED LEDGER LINES.
38200 335 SX=S+P-RX
38300 R5X=R5X+SX
38400 C SPACE DIFFERENCE
38500
38600 R7=RS
38700 IF(SX.LT.-.5)GO TO 29
38800 IF(SX.LT.0.5)GO TO 30
38900 2900 R4=RX
39000 R5=10000.
39100 R8=SX
39200 R9=0
39300 C ADJUST REST OF LINE
39400 CALL PTMOVE(Q,PN)
39500 IF(SX)GO TO 30
39600 29 R4=S
39700 R5=RX
39800 R8=S
39900 R9=RX+SX
40000 C ADJUST STUFF BETWEEN POINTS
40100 CALL PTMOVE(Q,PN)
40200 IF(SX)GO TO 2900
40300
40400 30 LB=LB+1
40500 IF(LB.LT.L)GO TO 25
40600 C GO BACK IF MORE SPACING TO DO
40700 C*** IF(XLFT.EQ.0)GO TO 600
40800 C NEXT MOVES LEFT SIDE OF STAFF TO ZERO
40900 CC R5=10000.
41000 CC R7=RS
41100 CC R8=-XLFT
41200 CC R4=-101
41300 CC R9=0
41400 CC CALL PTMOVE(Q,PN)
41500 C*** CALL LINELN
41600 C BREAKS IT UP INTO LINES.
41700 J=1
41800 CALL OFILE(1,'PX')
41900 LL=PN(L+1)
42000 2929 WRITE(1),L,LL,
42100 1(PN(K),K=1,L+1),(Q(K),K=1,LL-1),NAMX,STFSZ,J,J,RSTFAC,STFF,IV,STFF
42200 STOP
42300 2 FORMAT(A5)
42400 3001 FORMAT(2I6)
42500 5 FORMAT(5F)
42600
42700
42800 52 A=Q(N+4)
42900 Q(N+4)=A+TR
43000 C TRANSPOSES ONLY BY STAFF STEPS FOR NOW
43100 X=Q(N+5)
43200 IF(Q(N+1).EQ.1)GO TO 11
43300 C COULD ADD STEM REVERSE HERE.
43400 Q(N+5)=X+TR
43500 GO TO 51
43600 11 A=AMOD(A,100.)
43700 IF(TR.NE.4)GO TO 1101
43800 IF(AMOD(A,7.0).EQ.0)GO TO 101
43900 1101 IF(AMOD(TR-1.0,7.0).NE.0)GO TO 51
44000 C NEXT IS FOR Bb TRANSP.
44100 B=AMOD(A+7.0,7.0)
44200 IF(B.EQ.0)GO TO 101
44300 IF(B.NE.3)GO TO 51
44400 C FINDS ORIG. E OR B
44500 101 M=AMOD(X,10.0)
44600 C FINDS ACCID.
44700 X=X-M
44800 C STEM DIR. AND DECI.
44900 B=3.
45000 C CHANGES FLAT TO NATURAL SIGN.
45100 IF(M.NE.0)GO TO 118
45200 IF(SIG.NE.200)GO TO 51
45300 C GO BACK IF A KEY SIG. IS PRESENT
45400 118 IF(M.EQ.3)B=2
45500 C NO PROVISION YET FOR ## OR bb
45600 2101 Q(N+5)=X+B
45700 GO TO 51
45800 117 SIG=Q(N+5)
45900 IF(TR.EQ.1)SIG=SIG+2
46000 IF(TR.EQ.4)SIG=SIG+1
46100 C CHANGE KSIG FOR Bb AND F INSTS. ADD CHECK-UP ABOVE LATER.
46200 C MAKES NATURALS IF CHANGED TO NO KSIG (I.E. =0)
46300 IF(SIG.NE.0)GO TO 217
46400 IF(TR.EQ.1)SIG=-102
46500 IF(TR.EQ.3)SIG=-101
46600 217 Q(N+5)=SIG
46700 GO TO 51
46800 END